iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Modern Web

web3 短篇集系列 第 9

自主管理的錢包

  • 分享至 

  • xImage
  •  

昨天提到 escrow,今天就來講一下 self-custody。

使用 cast wallet new 可以產一個新的錢包如下:

Successfully created new keypair.
Address:     0x5DA75D4d0964e5f8B15FDBF7A833F6D93643345a
Private key: 0x8d3307c3fcd7d4257084e87b865ae9e54c0b4ad84146c4c8b98abfa9366f1f40

Private key 就像 Web2 的密碼一樣,只有持有者自己知道,而只要擁有秘密,就能執行這個錢包的所有交易。

但因為這個秘密太難記,輸入的時候也很不方便,使用者體驗差,因此有 mnemonic (seed phrase) 助記詞錢包。

使用 cast wallet new-mnemonic 可以產一個新的註記詞錢包:

Successfully generated a new mnemonic.
Phrase:
space clog try orchard approve camera kiss embody excess maximum junk door

Accounts:
- Account 0:
Address:     0xDd1B639662b5253799624797f23732935a4930B2
Private key: 0xe46f22857cb53786120665b1574d983df49b73d8ecdfa0494d64992f17ca4271

這類型的錢包我們稱作 EOA (Externally Owned Account)。

合約錢包

以智能合約寫成的錢包,叫作 SCA (Smart Contract Account)。

ERC-4337: Account Abstraction Using Alt Mempool 提案在不更動以太坊協議層的前提下,做錢包抽象化的基礎建設。

該提案引進 UserOperation 這個類似交易的物件,用戶要發起鏈上交易時,先把 UserOperation 送到另一個 mempool,Bundler(類似 relayer 的角色)將 mempool 內的 userOps 打包後,呼叫 EntryPoint.sol 的 handleOps

function handleOps(UserOperation[] calldata ops, address payable beneficiary) public nonReentrant 

EntryPoint.sol(必須是一個可信任的合約,目前由 Ethereum 官方團隊開發與部署)的 handleOps 會呼叫用戶 SCA 的 validateUserOp 然後再呼叫 SCA 上的執行函式(函式名稱依 SCA 實作而異,可能是 execute),此時一個用戶發起的交易才算完成。

--

SCA 其中一個好處,是將「驗證權限」與「執行交易」這兩個分開來,因為 EOA 是合在一起的。因此 SCA 可以使用多種方式去驗證交易發起者的權限,例如使用指紋辨識或 FaceID (webauthn 的技術) 來發起交易,或是使用另一個 EOA 來驗證、使用 Google 登入來驗證。

於是許多去中心化應用為了讓更多用戶上車 (onboarding),增加使用者體驗,會在應用中幫用戶創建一個新的 SCA 錢包,用戶可以透過指紋辨識做交易,不需要去記私鑰或註記詞。

這功能很方便,而且能將 Web3 應用更有效地推廣給沒接觸過的人使用,更厲害一點的話,完全不讓用戶知道自己在使用 Web3 的應用。

--

那麼上車的 SCA 用戶要如何確認自己真正擁有某 App 的錢包自主權呢?就是離開(walk away)這個 App,在不使用官方 App 的前提下,能夠向區塊鏈送出任意交易,此時錢包才是真正 self-custodial。

(尚需留意擁有該 SCA 錢包權限的人可能不止一個。)


上一篇
個案研究:wannabet
下一篇
以太坊客戶端跑起來
系列文
web3 短篇集30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言